package com.yjd.comm.fs.file;

import java.io.File;
import java.util.List;

import com.yjd.comm.fs.file.model.FileDownModel;
import com.yjd.comm.fs.file.model.FileUpModel;
import com.yjd.comm.fs.model.FileGroupModel;
import com.yjd.comm.fs.model.FsFileModel;

/**
 * 文件服务接口，负责文件的上传、下载等操作
 * 
 * @author ready
 * 
 */
public interface IFileService {

	/**
	 * 上传文件
	 * 
	 * @param fileUpModel
	 * @return
	 */
	public FsFileModel uploadFile(FileUpModel fileUpModel) throws Exception;

	/**
	* 批量上传
	* @param fileUpModels
	* @return
	* @throws Exception
	 */
	public List<FsFileModel> uploadFiles(List<FileUpModel> fileUpModels) throws Exception;

	/**
	 * 将某个文件上传到某个组中，如果组id为空，将新创建一个组
	 * 
	 * @param fileUpModels
	 *            上传的文件列表对象
	 * @param idFileGroup
	 *            文件组id
	 * @param cleanGroupFile
	 *            保存之前是否清楚组中的其他文件
	 * @return
	 * @throws Exception
	 */
	public FileGroupModel uploadFileToGroup(List<FileUpModel> fileUpModels,
			Long idFileGroup, Boolean cleanGroupFile) throws Exception;

	/**
	 * 根据文件id下载文件
	 * 
	 * @param idFsFile
	 * @return
	 */
	public FileDownModel downLoadFile(Long idFsFile) throws Exception;

	/**
	 * 将文件id关联的文件下载到制定的文件中
	 * 
	 * @param idFsFile
	 *            文件id
	 * @param file
	 *            保存到的本地文件
	 * @return
	 * @throws Exception
	 */
	public boolean downLoadFile(Long idFsFile, File file) throws Exception;

	/**
	 * 获取文件组中的文件列表
	 * 
	 * @param idFileGroup
	 * @return
	 */
	public List<FsFileModel> getFsFilesByFileGroupId(Long idFileGroup)
			throws Exception;

	/**
	 * 根据文件id获取文件信息
	 * 
	 * @param idFsFile
	 * @return
	 */
	public FsFileModel getFsFileByFsFileId(Long idFsFile) throws Exception;

	/**
	 * 删除某个组下面的相关文件
	 * 
	 * @param idFileGroup
	 *            指定的组id，不能为空
	 * @param idFsFileList
	 *            可以为空，若为空，将删除组中所有的文件，若不为空，将删除组中指定的文件
	 */
	public void deleteGropFiles(Long idFileGroup, List<Long> idFsFileList)
			throws Exception;

	/**
	 * @Title: getFsFileModels
	 * @Description: 根据文件id列表获取文件列表信息
	 * @param @param idFsFileList
	 * @param @return
	 * @param @throws Exception 设定文件
	 * @return List<FsFileModel> 返回类型
	 * @throws
	 */
	public List<FsFileModel> getFsFileModels(List<Long> idFsFileList)
			throws Exception;

}
